The development of the EDVAC computer system of 1948 is often cited as the beginning of the computer era. Since that time, computer systems have evolved into extremely sophisticated devices, and computer systems may be found in many different settings. One of the most important developments in making computers not only more powerful, but easier to use, was the development of sophisticated user interfaces, such as a Graphical User Interface (GUI).
A graphical user interface uses visual representations of common items to allow a user to operate a computer system. In most GUI-based systems, various windows, icons, symbols, menus, etc. are manipulated or activated by a computer user via a pointing device (e.g., a keyboard, mouse, trackball, touchpad, trackpad, or speech recognition device), which allows the user to give instructions to the computer. The movement of the pointing device is usually translated to the movement of an animated arrow or cursor, displayed on the computer screen. By moving the pointing device, the user can position the cursor at various locations on the computer screen. Then, by activating a button on the pointing device, the user can invoke various commands and options and input data using the graphical user interface. Thus, the user's focus of attention is often at or near the location of the graphical user interface that is occupied by the arrow or cursor.
Most graphical user interfaces make extensive use of windows. A window is usually, but not always, a rectangular portion of the display on a computer monitor that presents its contents seemingly independent from the rest of the screen. A window is typically manipulated by (1) opening and closing the window, e.g., by selecting an icon via the pointing device to start a program, (2) moving the window to any area of the screen by dragging (e.g., positioning the pointer over the window and moving the pointing device with a button held down), (3) repositioning the window, so that the window appears to be behind or in front of other windows or objects on the screen, (4) adjusting the size (i.e., horizontal and/or vertical dimensions) and (5) scrolling to any section of the window contents, e.g., by using scroll bars along the bottom and right edges of the window, or by using a mouse wheel or keyboard commands.
The size of most windows can be adjusted over a wide range including full screen, a fraction of the screen, and more than the full screen. In the latter case, the desired section of the window can be viewed by moving the window to expose it. Windows can also be minimized, which results in their being replaced by an icon and/or their name, usually in a taskbar, which is often disposed along the bottom of the screen, without actually closing the underlying application program.
Another feature of a windowing GUI is the ability for multiple windows to be open simultaneously. This is particularly valuable in a multitasking environment, i.e., an operating system in which multiple programs can run seemingly simultaneously and without interfering with each other. Each window can display a different application or data generated by a different application, each window can display different files that have been opened or created with a single application, or a window can display or represent data associated with multiple applications.
Multiple open windows can be arranged with respect to each other in a variety of ways. They can be arranged so that they are contiguous and do not overlap (tiled windows) or so they do overlap (overlaid windows). Overlaid windows resemble a stack of documents lying on top of one another, with only the upper-most window displayed in full. Any window can be moved to the top of the stack and made the active window (i.e., ready for receiving user input) by positioning the pointer in any portion of it that is visible and clicking a mouse button. When applications are launched, they may open in a single window or multiple windows.
Various type of windows exist, and their functions and appearances can vary substantially. For example, child windows are windows that are opened either automatically or as a result of some user activity when using a parent window. They can range in functionality from the very simple to the full complement of controls. Message windows, also referred to as dialog boxes or pop-up messages, are a type of child window. A dialog box is usually a small and very basic window that is opened by a program or by the operating system to provide information to the user and/or obtain information (or at least a response) from the user, including setting options or issuing commands.
Because the display screen may contain so many windows, and because some windows may pop up or open unexpectedly in response to asynchronous events, users are often deluged with an overwhelming assortment of attention-demanding windows, popups, and status or state indicators. With many of these windows, the user waits for a change to be made in the state of a window, and this change in state indicates that further action needs to be taken, or an operation is complete, so action is now allowed to be taken. This paradigm of waiting for a state change and then taking action is prevalent in applications such as email, instant messaging (IM), programming output, server consoles, dynamic websites, RSS (Rich Site Summary) feeds, and many others. The result is that users frequently toggle between windows in an attempt to determine the current state of various applications, which hampers the users' productivity.
Some applications attempt to aid the user by displaying an icon in the window or taskbar or by blinking or highlighting data in the window, in order to indicate a change of state. Unfortunately, the user still needs to toggle to the window and/or view the portion of the window or taskbar with the icon to determine the state. Even if the window whose state has changed is currently open, the user's attention has likely shifted to some other portion of the window, so that the user is not looking at the portion where the state change is indicated.
Other applications change the display of a cursor to a different icon (e.g., an hourglass icon or other “wait cursor”) when an application is busy and unable to accept input. But, a wait cursor is not helpful when multiple applications are executing simultaneously because a wait cursor does not indicate which of the multiple executing applications is waiting.
Still other applications change the display of a cursor in response to movement of the cursor over a window to reflect the state of the application in that window. Unfortunately, this technique only displays state for one application at a time and requires the user to proactively move the cursor over various windows to check their state at a time when the user's attention is elsewhere.
Thus, a better technique is needed for determining the states of multiple windows representing applications that are operating simultaneously.